package com.erp.integrate;

import com.erp.utils.HttpClient;
import com.github.wxpay.sdk.WXPayUtil;

import java.util.HashMap;
import java.util.Map;

public class WxPay {

    /**
     * 关联的公众号appid
     * weixin.appid=xxxxxxx
     * 商户号
     * weixin.partner=xxxxxxxx
     * 商户key
     * weixin.partnerkey=xxxxxxxxx
     *
     * @return
     */
    public static Map<String, String> pay() {
        try {
            //订单号
            String orderNo = "";
            //价格
            String price = "1";

            //1 设置参数，把参数转换xml格式，使用商户key进行加密
            Map paramMap = new HashMap();
            //公众号appid
            paramMap.put("appid", "APPID");
            //商户号
            paramMap.put("mch_id", "PARTNER");
            paramMap.put("nonce_str", WXPayUtil.generateNonceStr());
            //主体信息
            paramMap.put("body", "微信支付测试");
            paramMap.put("out_trade_no", orderNo);
            paramMap.put("total_fee", price);
            paramMap.put("spbill_create_ip", "127.0.0.1");//项目的域名
            //回调地址
            paramMap.put("notify_url", "http://guli.shop/api/order/weixinPay/weixinNotify");
            //生成二维码的类型
            paramMap.put("trade_type", "NATIVE");

            //2 调用微信生成二维码接口,httpclient调用
            String url = new String("https://api.mch.weixin.qq.com/pay/unifiedorder");
            //商户key
            String xmlParam = WXPayUtil.generateSignedXml(paramMap, "PARTNERKEY");
            String xml = HttpClient.post(url, "certPassword", null, xmlParam, true);

            //3 得到发送请求返回结果
            //返回内容，是使用xml格式返回，转换map集合
            Map<String, String> resultMap = WXPayUtil.xmlToMap(xml);
            //6 封装返回结果集
            Map<String, String> map = new HashMap<>();
            map.put("orderId", orderNo);
            map.put("totalFee", price);
            map.put("resultCode", resultMap.get("result_code"));
            //二维码地址
            map.put("codeUrl", resultMap.get("code_url"));

            return map;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

}
